﻿package com.eitb.programas.ticker{
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	import flash.net.*;
	import flash.text.*;
	

 	import com.eitb.net.*;
	import com.eitb.literales.*;
	import com.eitb.programas.ticker.rutas.*;
	import com.eitb.programas.ticker.entidades.*;

	public class ModeloTicker implements IControladorTicker {
		private static const COD_CLASIFICACION:String="cod_clasificacion";
		private static const COD_URL:String="url";

		private var vTicker:IVistaTicker;

		private var timer:Timer;
		private var clasifiacionesXml:XMLList;
		private var clasificaciones:Object;
		private var transition:Object;
		private var icono:Bitmap;
		private var idioma:int;

		private var rssUrls:Array;
		private var noticias:Array;
		private var iNoticia:int;

		public function ModeloTicker():void {
			this.rssUrls=new Array  ;
			this.noticias=new Array  ;
			this.iNoticia=-1;
		}

		// INIT COMPONENTES
		public function initVista(vTicker:IVistaTicker):void {
			trace("initVista");

			this.vTicker=vTicker;
		}
		// INIT COMPONENTES

		// INIT PARAMETROS
		public function initIdioma(idioma:int):void {
			trace("initIdioma");

			this.idioma=idioma;
		}

		public function initClasificacionesXml(clasifiacionesXml:XMLList) {
			trace("initClasificacionXml");

			this.clasifiacionesXml=clasifiacionesXml;
		}

		public function initClasificaciones(clasificaciones:Array) {
			trace("initClasificacion");

			this.clasificaciones=clasificaciones;
		}

		public function initTransition(transition:Object) {
			trace("initTransacion");

			this.transition=transition;
		}

		public function initIcono(icono:Bitmap,formato:Object) {
			trace("initIcono");
			this.icono=icono;

			var background:Shape = new Shape();
			this.vTicker.addChild(background);

			background.graphics.beginFill(0x222222);
			background.graphics.drawRoundRect(formato.icono.x,formato.icono.y,formato.icono.width,formato.icono.height, 0, 0);
			background.graphics.endFill();

			this.icono.x=formato.icono.x+formato.icono.margen/2;
			this.icono.y=formato.icono.y+formato.icono.margen/2;
			this.icono.width=formato.icono.width-formato.icono.margen;
			this.icono.height=formato.icono.height-formato.icono.margen;

			this.vTicker.addChild(this.icono);
		}

		public function initNextNewTimer(timer:Timer) {
			trace("initTiempo");

			this.timer=timer;
			this.timer.start();
		}

		// INIT PARAMETROS

		// FLUJO
		public function start():void {
			trace("comenzar");

			var rutas:Rutas=new Rutas  ;
			var idioma:String=Literales.getIdioma(this.idioma);
			// revisa los parametros de inicio para comprobar que tiene valores por defecto

			// obtiene las urls a partir de las clasificaciones seleccionadas y el archivo clasificacionesXml
			for each (var clasificacionXml:XML in this.clasifiacionesXml) {
				for each (var clasificacion:String in this.clasificaciones) {
					if (clasificacionXml.attribute(ModeloTicker.COD_CLASIFICACION)==clasificacion) {
						this.rssUrls.push(rutas.getRss(idioma,clasificacionXml.attribute(ModeloTicker.COD_URL)));
					}
				}
			}
			// realiza las comprobaciones de las caches para las peticiones de los rss

			for each (var rssUrl:String in this.rssUrls) {
				this.loadRss(new URLRequest(rssUrl));
			}

			// muestra las noticias por pantalla mientras carga los rss


		}
		// FLUJO

		private function loadRss(rss:URLRequest):void {
			trace("loadRss");
			var loader:URLLoader;
			loader=new URLLoader  ;
			loader.addEventListener(Event.COMPLETE,completeHandler);
			try {
				loader.load(rss);
			} catch (error:Error) {
			}
		}
		private function completeHandler(event:Event):void {
			trace("completeHandler");
			// guarda los datos del xml
			var noticiasXml:XMLList=new XML(URLLoader(event.target).data)..item;

			for each (var noticia:XML in noticiasXml) {
				var oNoticia=new Noticia  ;
				oNoticia.setTitle(noticia.title);
				oNoticia.setDescription(noticia.description);
				oNoticia.setLink(noticia.link);
				this.noticias.push(oNoticia);
			}
		}

		// IControladorTicker
		public function onTimerNext(evt:TimerEvent):void {
			trace("siguientePorTiempo");
			this.nextNew();
			this.vTicker.transition(this.transition);
		}
		public function onMouseClick(evt:MouseEvent):void {
			trace("click");
			this.openLink();
		}

		/*
		* TODO: por algun motivo no funciona la deteccion de doble click
		*/
		public function onMouseDoubleClick(evt:MouseEvent):void {
			trace("dobleClick");
			trace(this.noticias[iNoticia].getLink());
		}
		// IControladorTicker

		private function nextNew():void {
			if (this.iNoticia<this.noticias.length) {
				this.vTicker.setNoticia(this.noticias[++this.iNoticia]);
			}
			if (this.iNoticia==this.noticias.length) {
				this.iNoticia=-1;
			}
		}

		private function openLink():void {
			PopupWin.openWindow(this.noticias[this.iNoticia].getLink());
//			navigateToURL(Rutas.getRequest(this.noticias[this.iNoticia].getLink()), "_blank");
		}
	}
}